﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Xml;
using System.IO;



namespace GenIX
{

    //<OUTPUT>
    //=================================ВЫВОД ДОКУМЕНТА В ФАЙЛ================================================
    //</OUTPUT>
    public partial class NewXML : Form
    {
        //добавляет в документ заполненный элемент
        private void AddElement(object sender, EventArgs e)
        {


            for (int i = 0; i < panel1.Controls.Count; i++)
                if (i % 2 == 0 && panel1.Controls[i].Text == "")
                {
                    panel1.Controls[i].Text = "DEFAULT" + (i / 2 + 1).ToString();
                    return;
                }
            byte j = 0;
            string TagName = string.Empty;
            string TagInnerText = string.Empty;
            //<LOADING>
            // Загружаем XML-документ из файла
            //</LOADING>

            if (checkBox1.Checked == true & DTDwritten == false)
            {
                try
                {
                    if (!File.Exists(Path.GetDirectoryName(FileName) + "\\ROWS.dtd"))
                    {
                        this.Enabled = false;
                        File.Copy(DTDpath, Path.GetDirectoryName(FileName) + "\\ROWS.dtd", true);
                        DTDexists = false;
                        this.Enabled = true;
                    }
                    else
                        DTDexists = true;
                    {
                        XmlDocumentType doctype = Doc.CreateDocumentType("ROWS", null, "ROWS.dtd", null);
                        Doc.InsertBefore(doctype, Doc.DocumentElement);
                    }
                }
                catch (XmlException ex)
                {
                    MessageBox.Show(ex.Message, ex.GetType().ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                catch (System.IO.FileNotFoundException any)
                {
                    MessageBox.Show(any.Message, "Не найден файл DTD", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                catch (UnauthorizedAccessException unex)
                {
                  MessageBox.Show("Файл доступен только для чтения!","Ошибка доступа к файлу",
                  MessageBoxButtons.OK, MessageBoxIcon.Warning);
                  return;
                }
                    DTDwritten = true;
                    numericUpDown1.Enabled = false;
            }
            else
                written = true;
            checkBox1.Enabled = false;

            XmlNode parentNode = Doc.DocumentElement;
            XmlNode node = Doc.CreateElement("ROW");
            parentNode.AppendChild(node);
            parentNode = node;
            for (j = 1; j <= NumberOfFields; j++)
            {

                TagInnerText = panel1.Controls[j * 2 - 1].Text;

                if (checkBox1.Checked == true)
                    TagName = TagNames[j - 1];
                else
                    TagName = tbName[j].Text;

                XmlNode node_in_row = Doc.CreateElement(TagName);
                node_in_row.InnerText = TagInnerText;

                parentNode.AppendChild(node_in_row);
            }
            try
            {
                Doc.Save(FileName);
            }
            catch (XmlException em)
            {
                MessageBox.Show(em.Message, "Ошибка в структуре файла XML", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            catch (UnauthorizedAccessException unex)
            {
                MessageBox.Show("Файл доступен только для чтения!", "Ошибка доступа к файлу",
                MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            finally
            {
                NotView = true;
                int r = 0;
                XmlNode root = Doc.DocumentElement;
                XmlNodeList rows = root.ChildNodes;
                tnode.Nodes.Clear();
                for (r = 0; r < rows.Count; r++)
                {
                    tnode.Nodes.Add("[" + rows[r].ChildNodes[0].InnerText + "] " +
                        rows[r].ChildNodes[1].InnerText + ": '" +
                        rows[r].ChildNodes[2].InnerText + "'");
                }
            }
            EraseAllFields(0, e);
            treeView1.ExpandAll();
        }
    }
}
